home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 1 / LSD Compendium Deluxe 1.iso / a / programming / assembly / kreatorvec.lha / storage / vectors / VECTOR1.S < prev   
Encoding:
Text File  |  1990-09-06  |  7.4 KB  |  430 lines

  1.     incdir    df0:
  2.     Include    "CustomRegisters"
  3.     Section    Cube,Code_c
  4.  
  5. Ciaapra = $BFE001
  6. Openlibrary = -30-522    
  7. Disable        = -120
  8. Enable        = -126
  9. Startlist   = 38
  10. Execbase = 4
  11.  
  12.     Move.l    Execbase,a6
  13.     Jsr    Disable(a6)
  14.  
  15. ;-------- Switch Copper DMA ----------
  16.  
  17.     Move.l    #Clstart,Cop1lc
  18.     Clr    Copjmp1
  19.  
  20.     Move.w    #$8780,Dmacon
  21.     Move.w    #$0020,Dmacon
  22.     Lea    Spr0data,a0
  23.     Moveq    #7,d0
  24. Clop
  25.     Clr.l    (a0)
  26.     Addq.l    #8,a0
  27.     Dbf    d0,Clop
  28.  
  29. ;------ Wait for Vertical position 1 --------
  30.  
  31. Wait:    Move.l    $dff004,d2
  32.     And.l    #$0001ff00,d2    
  33.     Cmp.l    #$00000100,d2
  34.     Bne.s    Wait
  35.  
  36.     Addq    #2,Zrot
  37.     And    #$1fe,Zrot
  38.     Addq    #4,Yrot
  39.     And    #$1fe,Yrot
  40.     Subq    #2,Xrot
  41.     And    #$1fe,Xrot
  42.     Bsr    TD_rout
  43.  
  44.     Btst    #6,Ciaapra
  45.     Bne    Wait
  46.  
  47. ;------ Restore old Copper list -----------
  48.  
  49.     Move.l    Execbase,a6
  50.     Move.l    #Grname,a1
  51.     Clr.l    d0
  52.     Jsr    Openlibrary(a6)
  53.     Move.l    d0,a4
  54.     Move.l    Startlist(a4),Cop1lc
  55.     Clr.w    Copjmp1
  56.     Move.w    #$83E0,Dmacon
  57.     Jsr    Enable(a6)
  58.     Clr.l    d0
  59.     Rts
  60.  
  61. ;--------- 3D graphics ------------
  62. TD_rout
  63.     Move.l    Current(pc),d0
  64.     Move    d0,Screen+2
  65.     Swap    d0
  66.     Move    d0,Screen+6
  67.     Eor.l    #$3000,Current
  68.     Move.l    Current(pc),a0
  69.     Move.l    #$1f00000,Bltcon0
  70.     Move.l    a0,Bltdpth
  71.     Clr    Bltadat
  72.     Clr    Bltdmod
  73.     Move    #256*64+20,Bltsize
  74.  
  75.     Move    #No_points-1,d7
  76.     Lea    Points(pc),a4    
  77.     Lea    Sintable+$40(pc),a1
  78.     Lea    Rotated_coords(pc),a2
  79.     Lea    Perspective(pc),a3
  80. TD_loop
  81.     Move    (a4)+,d0
  82.     Move    d0,d2
  83.     Move    (a4)+,d1
  84.     Move    d1,d3
  85.  
  86.     Move    Zrot(pc),d6
  87.     Move    $40(a1,d6),d4
  88.     Move    -$40(a1,d6),d5
  89.     Muls    d4,d0
  90.     Muls    d5,d1
  91.     Sub.l    d1,d0
  92.     Add.l    d0,d0
  93.     Swap    d0        ;d0 holds intermediate x coord
  94.     Muls    d5,d2
  95.     Muls    d4,d3
  96.     Add.l    d3,d2
  97.     Add.l    d2,d2
  98.     Swap    d2        ;d2 holds intermediate y coord
  99.     Move    d2,d4
  100.  
  101.     Move    (a4)+,d1    ;z coord
  102.     Move    d1,d3
  103.     Move    Xrot(pc),d6
  104.     Move    $40(a1,d6),d5
  105.     Move    -$40(a1,d6),d6
  106.     Muls    d5,d2
  107.     Muls    d6,d1
  108.     Sub.l    d1,d2
  109.     Add.l    d2,d2
  110.     Swap    d2        ;d2 holds the final y coord
  111.     Muls    d5,d3
  112.     Muls    d6,d4
  113.     Add.l    d4,d3
  114.     Add.l    d3,d3
  115.     Swap    d3        ;d3 holds intermediate z coord
  116.  
  117.     Move    d0,d1
  118.     Move    d3,d4
  119.     Move    Yrot(pc),d6
  120.     Move    $40(a1,d6),d5
  121.     Move    -$40(a1,d6),d6
  122.     Muls    d5,d3
  123.     Muls    d6,d0
  124.     Sub.l    d0,d3
  125.     Add.l    d3,d3
  126.     Swap    d3        ;d3 holds the final z coord
  127.     Muls    d6,d4
  128.     Muls    d5,d1
  129.     Add.l    d4,d1
  130.     Add.l    d1,d1
  131.     Swap    d1        ;d1 holds the final x coord
  132.  
  133.     Add    Depth(pc),d3
  134.     Add    d3,d3
  135.     Move    (a3,d3),d5
  136.     Muls    d5,d1
  137.     Muls    d5,d2
  138.     Add.l    d1,d1
  139.     Swap    d1
  140.     Add    #160,d1
  141.     Add.l    d2,d2
  142.     Swap    d2
  143.     Add    #128,d2
  144.     
  145.     Move    d1,(a2)+
  146.     Move    d2,(a2)+
  147.     Dbf    d7,TD_loop
  148.  
  149.     Move    #No_connects-1,d7
  150.     Lea    $dff000,a5
  151.     Lea    Connect(pc),a3
  152.     Lea    Rotated_coords(pc),a4
  153.     Moveq    #40,d0
  154.     Lea    Mul40(pc),a1
  155.     Lea    Bits(pc),a2
  156. B_wait2
  157.     Btst    #14,Dmaconr
  158.     Bne.s    B_wait2
  159.  
  160.     Move    #$ffff,Bltafwm
  161.     Move    d0,$60(a5)    ;Bltcmod
  162.     Move    d0,$66(a5)    ;Bltdmod
  163.     Move    #$ffff,$72(a5)    ;Bltbdat
  164. Draw_loop
  165.     Move    (a3)+,d6
  166.     Move    (a4,d6),d0
  167.     Move    2(a4,d6),d1
  168.     Move    (a3)+,d6
  169.     Move    (a4,d6),d2
  170.     Move    2(a4,d6),d3
  171.     Cmp    d0,d2
  172.     Bne.s    Draw
  173.     Cmp    d1,d3
  174.     Beq.s    Nodraw    
  175. Draw
  176.     Bsr    Line
  177. Nodraw
  178.     Dbf    d7,Draw_loop
  179. Bwit
  180.     Btst    #14,Dmaconr
  181.     Bne.s    Bwit
  182.     Rts
  183.  
  184. ;----------- Line Draw ------------
  185. Line
  186.     Moveq    #0,d4
  187.     Move    d1,d4
  188.     Add    d4,d4
  189.     Move    (a1,d4),d4
  190.     Moveq    #-$10,d5
  191.     And    d0,d5
  192.     Lsr    #3,d5
  193.     Add    d5,d4
  194.     Add.l    a0,d4
  195.  
  196.     Moveq    #0,d5
  197.     Sub    d1,d3
  198.     Roxl.b    d5
  199.     Tst    d3
  200.     Bge.s    Y2gy1
  201.     Neg    d3
  202. Y2gy1
  203.     Sub    d0,d2
  204.     Roxl.b    d5
  205.     Tst    d2
  206.     Bge.s    X2gx1
  207.     Neg    d2
  208. X2gx1
  209.  
  210.     Move    d3,d1
  211.     Sub    d2,d1
  212.     Bge.s    Dygdx
  213.     Exg    d2,d3
  214. Dygdx
  215.     Roxl.b    d5
  216.     Move.b    Octant_table(pc,d5),d5
  217.     Add    d2,d2
  218. Wblit
  219.     Btst    #14,Dmaconr
  220.     Bne.s    Wblit
  221.  
  222.     Move    d2,$62(a5)    ;Bltbmod
  223.     Sub    d3,d2
  224.     Bge.s    Signn1
  225.     Or.b    #$40,d5
  226. Signn1
  227.     Move    d2,$52(a5)    ;Bltaptl
  228.     Sub    d3,d2
  229.     Move    d2,$64(a5)    ;Bltamod
  230.  
  231.     Move    #$8000,$74(a5)    ;Bltadat
  232.     Add    d0,d0
  233.     Move    (a2,d0),$40(a5)    ;Bltcon0
  234.     Move    d5,$42(a5)    ;Bltcon1
  235.     Move.l    d4,$48(a5)    ;Bltcpth
  236.     Move.l    d4,$54(a5)    ;Bltdpth
  237.     Lsl    #6,d3
  238.     Addq    #2,d3
  239.     Move    d3,$58(a5)    ;Bltsize
  240.     Rts
  241.  
  242. ;---------- Constants -------------
  243.  
  244. Octant_table
  245.     Dc.b    1,17,9,21,5,25,13,29
  246.  
  247. Grname:    Dc.b    "graphics.library",0
  248.  
  249.     Even
  250.  
  251. ;----------- Variables ------------
  252.  
  253. Xrot    Dc.w    $100
  254. Yrot    Dc.w    0
  255. Zrot    Dc.w    0
  256. Current    Dc.l    $70000
  257. Depth    Dc.w    180
  258. Depthpt    Dc.w    0
  259.  
  260. ;---------- Copperlists -----------
  261. Clstart:
  262.     Wait    0,20
  263.     Mov    $1a81,Diwstrt
  264.     Mov    $39c1,Diwstop
  265.     Mov    $0038,Ddfstrt
  266.     Mov    $00d0,Diwstop
  267. Screen
  268.     Mov    0,Bpl1ptl
  269.     Mov    7,Bpl1pth
  270.     Mov    $1200,Bplcon0
  271.     Mov    0,Bpl1mod
  272.     Mov    0,Color00
  273.     Mov    $fff,Color01
  274.     Wait    224,255
  275.     Wait    $fe,$ff
  276.  
  277. ;--------- Binaries -------------
  278. No_points    = 8
  279. No_connects    = 12
  280. No_faces    = 6
  281.  
  282. Points
  283.     Dc.w    100,100,100
  284.     Dc.w    -100,100,100
  285.     Dc.w    -100,-100,100
  286.     Dc.w    100,-100,100
  287.  
  288.     Dc.w    100,100,-100
  289.     Dc.w    -100,100,-100
  290.     Dc.w    -100,-100,-100
  291.     Dc.w    100,-100,-100
  292.  
  293. Connect
  294.     Dc.w    0,4
  295.     Dc.w    4,8
  296.     Dc.w    8,12
  297.     Dc.w    12,0
  298.  
  299.     Dc.w    16,20
  300.     Dc.w    20,24
  301.     Dc.w    24,28
  302.     Dc.w    28,16
  303.  
  304.     Dc.w    0,16
  305.     Dc.w    4,20
  306.     Dc.w    8,24
  307.     Dc.w    12,28
  308.  
  309. Rotated_coords    
  310.     Dcb.w    No_points*2,0
  311. Sintable
  312.     DC.W    $15FC,$1920,$1C44,$1F68
  313.     DC.W    $228C,$25B0,$28D4,$2B1F
  314.     DC.W    $2E10,$30FB,$33DE,$36B9
  315.     DC.W    $398C,$3C56,$3F17,$41CD
  316.     DC.W    $447A,$471C,$49B3,$4C3F
  317.     DC.W    $4EBF,$5133,$539A,$55F5
  318.     DC.W    $5842,$5A82,$5CB3,$5ED7
  319.     DC.W    $60EB,$62F1,$64E8,$66CF
  320.     DC.W    $68A6,$6A6D,$6C23,$6DC9
  321.     DC.W    $6F5E,$70E2,$7254,$73B5
  322.     DC.W    $7504,$7641,$776B,$7884
  323.     DC.W    $7989,$7A7C,$7B5C,$7C29
  324.     DC.W    $7CE3,$7D89,$7E1D,$7E9C
  325.     DC.W    $7F09,$7F61,$7FA6,$7FD8
  326.     DC.W    $7FF5,$7FFF,$7FF5,$7FD8
  327.     DC.W    $7FA6,$7F61,$7F09,$7E9C
  328.     DC.W    $7E1D,$7D89,$7CE3,$7C29
  329.     DC.W    $7B5C,$7A7C,$7989,$7884
  330.     DC.W    $776B,$7641,$7504,$73B5
  331.     DC.W    $7254,$70E2,$6F5E,$6DC9
  332.     DC.W    $6C23,$6A6D,$68A6,$66CF
  333.     DC.W    $64E8,$62F1,$60EB,$5ED7
  334.     DC.W    $5CB3,$5A82,$5842,$55F5
  335.     DC.W    $539A,$5133,$4EBF,$4C3F
  336.     DC.W    $49B3,$471C,$447A,$41CD
  337.     DC.W    $3F17,$3C56,$398C,$36B9
  338.     DC.W    $33DE,$30FB,$2E10,$2B1F
  339.     DC.W    $2826,$2527,$2223,$1F19
  340.     DC.W    $1C0B,$18F8,$15E1,$12C7
  341.     DC.W    $FAB,$C8B,$96A,$647
  342.     DC.W    $324,0,$FCDB,$F9B8
  343.     DC.W    $F695,$F374,$F054,$ED38
  344.     DC.W    $EA1E,$E707,$E3F4,$E0E6
  345.     DC.W    $DDDC,$DAD8,$D7D9,$D4E0
  346.     DC.W    $D1EF,$CF04,$CC21,$C946
  347.     DC.W    $C673,$C3A9,$C0E8,$BE32
  348.     DC.W    $BB85,$B8E3,$B64C,$B3C0
  349.     DC.W    $B140,$AECC,$AC65,$AA0A
  350.     DC.W    $A7BD,$A57D,$A34C,$A128
  351.     DC.W    $9F14,$9D0E,$9B17,$9930
  352.     DC.W    $9759,$9592,$93DC,$9236
  353.     DC.W    $90A1,$8F1D,$8DAB,$8C4A
  354.     DC.W    $8AFB,$89BE,$8894,$877B
  355.     DC.W    $8676,$8583,$84A3,$83D6
  356.     DC.W    $831C,$8276,$81E2,$8163
  357.     DC.W    $80F6,$809E,$8059,$8027
  358.     DC.W    $800A,$8000,$800A,$8027
  359.     DC.W    $8059,$809E,$80F6,$8163
  360.     DC.W    $81E2,$8276,$831C,$83D6
  361.     DC.W    $84A3,$8583,$8676,$877B
  362.     DC.W    $8894,$89BE,$8AFB,$8C4A
  363.     DC.W    $8DAB,$8F1D,$90A1,$9236
  364.     DC.W    $93DC,$9592,$9759,$9930
  365.     DC.W    $9B17,$9D0E,$9F14,$A128
  366.     DC.W    $A34C,$A57D,$A7BD,$AA0A
  367.     DC.W    $AC65,$AECC,$B140,$B3C0
  368.     DC.W    $B64C,$B8E3,$BB85,$BE32
  369.     DC.W    $C0E8,$C3A9,$C673,$C946
  370.     DC.W    $CC21,$CF04,$D1EF,$D4E0
  371.     DC.W    $D7D9,$DAD8,$DDDC,$E0E6
  372.     DC.W    $E3F4,$E707,$EA1E,$ED38
  373.     DC.W    $F054,$F374,$F695,$F9B8
  374.     DC.W    $FCDB,0,$324,$647
  375.     DC.W    $96A,$C8B,$FAB,$12C7
  376.     DC.W    $15E1,$18F8,$1C0B,$1F19
  377.     DC.W    $2223,$2527,$2826,$2B1F
  378.     DC.W    $2E10,$30FB,$33DE,$36B9
  379.     DC.W    $398C,$3C56,$3F17,$41CD
  380.     DC.W    $447A,$471C,$49B3,$4C3F
  381.     DC.W    $4EBF,$5133,$539A,$55F5
  382.     DC.W    $5842,$5A82,$5CB3,$5ED7
  383.     DC.W    $60EB,$62F1,$64E8,$66CF
  384.     DC.W    $68A6,$6A6D,$6C23,$6DC9
  385.     DC.W    $6F5E,$70E2,$7254,$73B5
  386.     DC.W    $7504,$7641,$776B,$7884
  387.     DC.W    $7989,$7A7C,$7B5C,$7C29
  388.     DC.W    $7CE3,$7D89,$7E1D,$7E9C
  389.     DC.W    $7F09,$7F61,$7FA6,$7FD8
  390.     DC.W    $7FF5,$7FFF,$7FF5,$7FD8
  391.     dc.w    $7fd8,$7fa6,$7f61,$7f09
  392.     dc.w    $7e9c,$7e1d,$9d89,$7ce3
  393.     dc.w    $7c29,$7b5c,$7a7c,$7989
  394.     dc.w    $7884,$776b,$7641,$7504
  395.     dc.w    $73b5,$7254,$70e2,$6f5e
  396.     dc.w    $6dc9,$6c23,$6a6d,$68a6
  397.     dc.w    $66cf,$64e8,$62f1,$60eb
  398.     dc.w    $5ed7,$5cb3,$5a82,$5842
  399.     dc.w    $55f5,$539a,$5133,$4ebf
  400.     dc.w    $4c3f,$49b3,$471c,$447a
  401.     dc.w    $41cd,$3f17,$3c56,$398c
  402.     dc.w    $36b9,$33de,$30fb,$2e10
  403.     dc.w    $2b1f,$28d4,$25b0,$228c
  404.     dc.w    $1f68,$1c44,$1920,$15fc
  405. Perspective
  406.     Incbin    "Perspective"
  407.  
  408. Mul40
  409. A set 0
  410.     Rept    320
  411.     Dc.w    A*40
  412. A set A+1
  413.     Endr
  414.  
  415. A set 0
  416. Bits
  417.     Rept    320
  418.     Dc.w    ((A&$f)*$1000)+$bca
  419. A set A+1
  420.     Endr
  421.  
  422. Size
  423. A set 0
  424.     Rept    320
  425.     Dc.w    (A*64)+2
  426. A set A+1
  427.     Endr
  428.  
  429.     end
  430.